home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / usr / lib / glibmm-2.4 / proc / m4 / class_gtkobject.m4 < prev    next >
M4 Source File  |  2006-04-20  |  5KB  |  215 lines

  1. dnl $Id: class_gtkobject.m4,v 1.4 2003/12/14 11:53:04 murrayc Exp $
  2.  
  3.  
  4.  
  5. define(`_CLASS_GTKOBJECT',`dnl
  6. _PUSH()
  7. dnl
  8. dnl  Define the args for later macros
  9. define(`__CPPNAME__',`$1')
  10. define(`__CNAME__',`$2')
  11. define(`__CCAST__',`$3')
  12. define(`__BASE__',_LOWER(__CPPNAME__))
  13. define(`__CPPPARENT__',`$4')
  14. define(`__CPARENT__',`$5')
  15. define(`__PCAST__',`($5*)')
  16.  
  17. dnl Some C types, e.g. GdkWindow or GdkPixmap, are a typedef to their base type,
  18. dnl rather than the real instance type.  That is really ugly, yes.  We get around
  19. dnl the problem by supporting optional __REAL_* arguments to this macro.
  20. define(`__REAL_CNAME__',ifelse(`$6',,__CNAME__,`$6'))
  21. define(`__REAL_CPARENT__',ifelse(`$7',,__CPARENT__,`$7'))
  22.  
  23.  
  24. dnl
  25. dnl ----------------------- Constructors -------------------------
  26. dnl
  27.  
  28.  
  29. _POP()
  30. _SECTION(SECTION_CLASS2)
  31. ')dnl end of _CLASS_GTKOBJECT
  32.  
  33. dnl Widget and Object, and some others, have custom-written destructor implementations:
  34. define(`_CUSTOM_DTOR',`dnl
  35. _PUSH()
  36. dnl Define this macro to be tested for later.
  37. define(`__BOOL_CUSTOM_DTOR__',`$1')
  38. _POP()
  39. ')
  40.  
  41. dnl Gtk::Object has a custom-written cast implementation:
  42. define(`_CUSTOM_CTOR_CAST',`dnl
  43. _PUSH()
  44. dnl Define this macro to be tested for later.
  45. define(`__BOOL_CUSTOM_CTOR_CAST__',`$1')
  46. _POP()
  47. ')
  48.  
  49. dnl Top-level windows can not be manage()ed, so we should not use manage() in wrap_new().
  50. define(`_UNMANAGEABLE',`dnl
  51. _PUSH()
  52. dnl Define this macro to be tested for later.
  53. define(`__BOOL_UNMANAGEABLE__',`$1')
  54. _POP()
  55. ')
  56.  
  57. dnl Gnome::Canvas::CanvasAA::CanvasAA() needs access to the
  58. dnl normally-private canvas_class_ member variable. See comments there.
  59. define(`_GMMPROC_PROTECTED_GCLASS',`dnl
  60. _PUSH()
  61. dnl Define this macro to be tested for later.
  62. define(`__BOOL_PROTECTED_GCLASS__',`1')
  63. _POP()
  64. ')
  65.  
  66.  
  67. dnl
  68. dnl _END_CLASS_GTKOBJECT()
  69. dnl   denotes the end of a class
  70. dnl
  71. define(`_END_CLASS_GTKOBJECT',`
  72. _SECTION(SECTION_HEADER1)
  73. _STRUCT_PROTOTYPE()
  74.  
  75. __NAMESPACE_BEGIN__ class __CPPNAME__`'_Class; __NAMESPACE_END__
  76. _SECTION(SECTION_HEADER3)
  77. namespace Glib
  78. {
  79.   /** @relates __NAMESPACE__::__CPPNAME__
  80.    * @param object The C instance
  81.    * @param take_copy False if the result should take ownership of the C instance. True if it should take a new copy or ref.
  82.    * @result A C++ instance that wraps this C instance.
  83.    */
  84.   __NAMESPACE__::__CPPNAME__`'* wrap(__CNAME__`'* object, bool take_copy = false);
  85. }
  86. dnl
  87. dnl
  88. _SECTION(SECTION_PHEADER)
  89.  
  90. #include <glibmm/class.h>
  91.  
  92. __NAMESPACE_BEGIN__
  93.  
  94. _PH_CLASS_DECLARATION()
  95.  
  96. __NAMESPACE_END__
  97.  
  98. _SECTION(SECTION_SRC_GENERATED)
  99.  
  100. namespace Glib
  101. {
  102.  
  103. __NAMESPACE__::__CPPNAME__`'* wrap(__CNAME__`'* object, bool take_copy)
  104. {
  105.   return dynamic_cast<__NAMESPACE__::__CPPNAME__ *> (Glib::wrap_auto ((GObject*)(object), take_copy));
  106. }
  107.  
  108. } /* namespace Glib */
  109.  
  110. __NAMESPACE_BEGIN__
  111.  
  112.  
  113. /* The *_Class implementation: */
  114.  
  115. _PCC_CLASS_IMPLEMENTATION()
  116.  
  117. Glib::ObjectBase* __CPPNAME__`'_Class::wrap_new(GObject* o)
  118. {
  119. ifdef(`__BOOL_UNMANAGEABLE__',`dnl
  120.   return new __CPPNAME__`'((__CNAME__*)`'(o)); //top-level windows can not be manage()ed.
  121. ',`dnl
  122.   return manage(new __CPPNAME__`'((__CNAME__*)`'(o)));
  123. ')
  124. }
  125.  
  126.  
  127. /* The implementation: */
  128.  
  129. ifdef(`__BOOL_CUSTOM_CTOR_CAST__',`dnl necessary for Gtk::Object implementation
  130. ',`dnl
  131. __CPPNAME__::__CPPNAME__`'(const Glib::ConstructParams& construct_params)
  132. :
  133.   __CPPPARENT__`'(construct_params)
  134. {
  135.   _IMPORT(SECTION_CC_INITIALIZE_CLASS_EXTRA) dnl Does not seem to work - custom implement it instead.
  136. }
  137.  
  138. __CPPNAME__::__CPPNAME__`'(__CNAME__* castitem)
  139. :
  140.   __CPPPARENT__`'(__PCAST__`'(castitem))
  141. {
  142.   _IMPORT(SECTION_CC_INITIALIZE_CLASS_EXTRA)  dnl Does not seem to work - custom implement it instead.
  143. }
  144.  
  145. ')dnl
  146. ifdef(`__BOOL_CUSTOM_DTOR__',`dnl
  147. ',`dnl
  148. __CPPNAME__::~__CPPNAME__`'()
  149. {
  150.   destroy_();
  151. }
  152.  
  153. ')dnl
  154. _CC_CLASS_IMPLEMENTATION()
  155.  
  156. __NAMESPACE_END__
  157.  
  158. dnl
  159. dnl
  160. dnl
  161. dnl
  162. _POP()
  163. dnl The actual class, e.g. Gtk::Widget, declaration:
  164. dnl _IMPORT(SECTION_H_SIGNALPROXIES_CUSTOM)
  165.  
  166. _IMPORT(SECTION_CLASS1)
  167. public:
  168. #ifndef DOXYGEN_SHOULD_SKIP_THIS
  169.   typedef __CPPNAME__ CppObjectType;
  170.   typedef __CPPNAME__`'_Class CppClassType;
  171.   typedef __CNAME__ BaseObjectType;
  172.   typedef __REAL_CNAME__`'Class BaseClassType;
  173. #endif /* DOXYGEN_SHOULD_SKIP_THIS */
  174.  
  175.   virtual ~__CPPNAME__`'();
  176.  
  177. #ifndef DOXYGEN_SHOULD_SKIP_THIS
  178.  
  179. m4_ifdef(`__BOOL_PROTECTED_GCLASS__',
  180. `protected:',`dnl else
  181. private:')dnl endif
  182.  
  183.   friend class __CPPNAME__`'_Class;
  184.   static CppClassType `'__BASE__`'_class_;
  185.  
  186.   // noncopyable
  187.   __CPPNAME__`'(const __CPPNAME__&);
  188.   __CPPNAME__& operator=(const __CPPNAME__&);
  189.  
  190. protected:
  191.   explicit __CPPNAME__`'(const Glib::ConstructParams& construct_params);
  192.   explicit __CPPNAME__`'(__CNAME__* castitem);
  193.  
  194. #endif /* DOXYGEN_SHOULD_SKIP_THIS */
  195.  
  196. public:
  197. #ifndef DOXYGEN_SHOULD_SKIP_THIS
  198.   static GType get_type()      G_GNUC_CONST;
  199.   static GType get_base_type() G_GNUC_CONST;
  200. #endif
  201.  
  202.   ///Provides access to the underlying C GtkObject.
  203.   __CNAME__*       gobj()       { return reinterpret_cast<__CNAME__*>(gobject_); }
  204.  
  205.   ///Provides access to the underlying C GtkObject.
  206.   const __CNAME__* gobj() const { return reinterpret_cast<__CNAME__*>(gobject_); }
  207.  
  208. _H_VFUNCS_AND_SIGNALS()
  209.  
  210. private:
  211. _IMPORT(SECTION_CLASS2)
  212.  
  213. ')
  214.  
  215.